/**
 * 
 */
package ca.csf.dfc.poo.bots;

import java.util.HashMap;

import ca.csf.dfc.poo.env.Direction;

/**
 * Contient les Q-valeurs de l'agent intelligent indiquant la direction à prendre dans chacune des cases de
 * l'Environnement.
 * 
 * @author Camille Besse.
 */
public class Qvalues
{

    /**
     * Contient les (maximum) 4 valeurs possibles pour HashMap<K, V>e donnée.
     */
    private HashMap<Direction, Double> m_v = new HashMap<Direction, Double>();

    /**
     * Renvoie la valeur associée à une direction pour la case donnée.
     * 
     * @param p_d
     *            La direction dont on souhaite la valeur
     * @return La valeur demandée.
     */
    public double getValue(Direction p_d)
    {
        Double d = m_v.get(p_d);
        if (d == null) return 0;
        else return d;

    }

    /**
     * Mets à jour une des Q-valeurs selon la direction donnée, les Q-valeurs de la case suivante et la récompense
     * immédiate.
     * 
     * @param p_d
     * @param p_qCaseSuivante
     * @param p_rec
     */
    public void update(Direction p_d, Qvalues p_qCaseSuivante, int p_rec)
    {
        m_v.put(p_d, p_rec + 0.9 * p_qCaseSuivante.max());
    }

    /**
     * Renvoie le maximum des Qvaleurs de la case
     * 
     * @return La Q-valeur maximale
     */
    private double max()
    {
        double max = 0;
        for (double d : m_v.values())
            if (max < d) max = d;
        return max;
    }

    /**
     * Redéfinition.
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString()
    {
        return "[" + this.m_v + "]";
    }

}
